Si vous êtes tout nouveau sur OpenXava, consulter en priorité le Quick Start guide.
Création d'un nouveau projet
Tout d'abord, lancez Eclipse et choisissez le workspace (espace de travail) qui est livré avec la distribution OpenXava.
En utilisant l'assistant approprié d'Eclipse, créez un nouveau projet Java (New Java Project) nommé Management. Maintenant que vous avez un nouveau projet Java vide dans le workspace.
Ouvrez le projet OpenXavaTemplate et lancez CreateNewProject.xmlen utilisant Ant.
Vous pouvez le faire en faisant un clic droit sur le fichier CreateNewProject.xml et dans le menu, choisir Run as... > Ant Build.
Lorsque le script Ant vous demandera le nom du projet, entrez Management dans la boîte de dialogue.
Pour finir, sélectionnez votre projet Management et pressez sur F5 afin de rafraîchir le contenu.
Vous avez à présent un nouveau projet prêt pour y travailler. Toutefois, avant de continuer, il s'agit de configurer le système de base de données.
Configuration de la base de données
OpenXava génère une application JavaEE/J2EE qui doit être déployée sur un serveur d'application Java (à partir de la v2.0 d'OpenXava, les applications peuvent aussi s'exécuter sur un conteneur de servlet simple, comme Tomcat). Dans OpenXava, vous avez uniquement besoin d'indiquer la source de données (Data Source) JNDI et de configurer celle-ci dans votre serveur d'application. La configuration d'une source de données n'entre pas dans le cadre de ce guide. Quoi qu'il en soit, vous trouverez ci-dessous les instructions détaillées pour configurer la base de donnée nécessaire pour exécuter ce premier projet en utilisant le serveur d'application Tomcat et le système de base de données Hypersonic, tous deux inclus dans la distribution OpenXava. Le serveur Tomcat est situé dans le dossier openxava-5.x/tomcat.
Assurez-vous que Tomcat est bien arrêté et éditez le fichier context.xml dans le dossier conf du serveur Tomcat. Dans ce fichier, ajoutez l'entrée suivante :
L'élément principal à noter ici est le nom JNDI, qui est l'unique référence utilisée par OpenXava, dans notre cas ManagementDS. La classe du pilote (driverClassName) et l'URL (url) dépendent de votre système. Dans notre cas, c'est Hypersonic qui est utilisé.
Votre premier composant métier
Créer un composant métier OpenXava est facile : La définition de chaque composant est une classe Java avec des annotations. Afin de commencer, vous devez créer une classe appelée Warehouse (entrepôt) :
Faites un clic droit sur le dossier src de votre projet et sélectionnez New > Package dans le menu contextuel
Créez un package avec le nom org.openxava.management.model
Faites un clic droit sur le paquetorg.openxava.management.model et sélectionnez New > Class
Créez une classe avec pour nom Warehouse
A présent, éditez la nouvelle classe et écrivez le code source suivant :
Cette classe contient (et contiendra) toutes les données nécessaires à l'application pour gérer le concept d'entrepôt (Warehouse). Pour le moment, nous avons uniquement la structure des données, mais vous pouvez y ajouter le mapping avec la base de données relationnelles, la logique métier, la présentation à l'écran, la gestion des listes, etc.
Concrètement, cette classe est une entité (Entity) conforme au standard JPA. Pour définir une classe comme entité, il suffit d'utiliser l'annotation @Entity dans la déclaration de classe. Dans l'entité, vous pouvez définir des propriétés ainsi:
@Id : Indique si la propriété fait partie de la clé. La clé est l'identificateur unique de l'objet et en général correspond à la clé primaire de la table de base de donnée.
@Column(length=...) : Correspond à la longueur de la donnée. Optionnel. Cette information est utilisée pour l'interface utilisateur et pour générer les scripts de création des tables.
@Required : Indique si la propriété est requise lors de la création ou de la modification de l'objet.
La propriété est définie de manière usuelle pour une classe Java. Tous les types valides pour une propriété Java sont applicables, y compris les type intégrés, les classes du JDK et les classes personnalisées.
Les possibilités de définition de propriétés vont bien au-delà de ce qui est montré ici. Une explication plus détaillée est disponible dans le chapitre Modèle.
La table
Avant de tester l'application, vous devez créer la table dans le système de base de données. Suivez ces étapes :
Lancez le serveur de base de données. Depuis la ligne de commande, allez dans le dossier openxava-3.x/tomcat/binet exécutez la ligne suivante:
Linux/Unix: ./start-hsqldb.sh management-db 1666
Windows: start-hsqldb management-db 1666
Remarque :
Pour lancer le serveur hsqldb il faut que la variable JAVA_HOME pointe vers un JDK et non un JRE
Set JAVA_HOME = C:\Program Files (x86)\Java\jdk1.7.0_11
Attention, il n’est pas nécessaire de mettre des quotes pour encadrer le path du JDK
Créez la table :
Editez le fichier Management/build.xml. Cherchez-y la cible Ant updateSchema.
Entrez une valeur correcte pour la propriété schema.path, dans notre cas "../OpenXavaTest/lib/hsqldb.jar".
Exécutez la cible Ant updateSchema.
Lancez Tomcat. S'il l'est déjà, il est nécessaire de le redémarrer. A présent, tout est prêt.
Exécution de votre application
Après ce rude labeur, il est temps de voir les fruits de votre sueur. Allons-y :
Press Ctrl-B to build the project (please translate this to French).
Même si la façon la plus naturelle de tester une application semble être l'ouverture de navigateur Internet et utiliser l'application comme l'utilisateur final, il est en fait bien plus productif d'automatiser les tests de façon à ce que, tout au long de la croissance de votre système, vous la contrôlez et vous diminuez les risques d'introduire des bugs au fur et à mesure de l'avancement de vos tâches.
OpenXava utilise un système de test basé sur JUnit et HttpUnit. Les tests OpenXava JUnit simulent le comportement d'un utilisateur réel avec son navigateur. Ainsi, vous pouvez répliquer exactement les mêmes tests que vous feriez directement avec un navigateur. L'avantage de cette approche est que vous pouvez tester facilement toutes les couches de votre programme depuis l'interface utilisateur jusqu'à la base de donnée.
Si vous testez les modules manuellement, vous créez en général un nouvel enregistrement, vous le cherchez, vous le modifiez et finalement vous le supprimez. Automatisons ce processus : Tout d'abord, nous devons créer un paquet (package) pour les classes de tests, org.openxava.management.tests, et d'y ajouter une classe WarehouseTest avec le code suivant :
Please, translate to French: To run this test click the mouse right button on WareshouseTest and choose Run As > JUnit Test.
Voici ce que cet exemple nous apprend :
Constructeur : Dans le constructeur, vous indiquez les noms de l'application et du module.
login: (New in v5.0)(Please, translate to French) Login in the application using a user and password.
execute : Cette méthode permet de simuler un click sur un bouton ou un lien. Comme argument, vous envoyez le nom de l'action. Vous pouvez voir les noms des actions dans le fichier OpenXava/xava/default-controllers.xml (les contrôleurs prédéfinis) et dans Management/xava/controllers.xml (les actions personnalisées). De même, si vous passez la souris sur un lien, le navigateur vous montre dans la barre d'état le code JavaScript avec l'action OpenXava à exécuter. Ici, execute("CRUD.new") est l'équivalent d'un click sur le bouton "nouveau" de l'interface graphique.
setValue : Cette méthode assige une valeur à un contrôle du formulaire. Cela signifie que setValue("name", "Pepe") a le même effet que de taper le texte "Pepe" dans le champ "name". Les valeurs sont toujours alphanumériques car elles sont acheminées ves un formulaire HTML.
assertNoErrors : Cet appel vérifie qu'aucune erreur s'est produite. Dans l'interface utilisateur, les erreurs sont des messages affichés en rouge et ajoutés par la logique applicative.
assertValue : Cet appel vérifie que la valeur dans un champ du formulaire est bien celle que l'on attend.
assertMessage : Cette méthode vérifie que l'application a bien affiché le message informatif attendu.
Vous pouvez constater qu'il est très aisé de tester le fonctionnement d'un module. Ecrire ce code peut prendre cinq minutes, mais, à la fin, peut vous sauver des heures de travail, car, à partir de maintenant, vous pouvez tester votre module en juste une seconde et que, si vous abîmez le module Warehouse (éventuellement touché par une autre partie de votre application), votre test vous prévient immédiatement.
Pour plus de détails, vous pouvez vous référer à la JavaDoc de org.openxava.tests.ModuleTestBase et étudier les exemples dans org.openxava.test.tests du projet OpenXavaTest. (Please, translate to French) You can disable login in your application, in that way you can avoid the first line of the test, the login("admin", "admin") (2) and get better performance for tests. To do it edit the properties/naviox.properties file and write:
autologinUser=adminautologinPassword=admin
This is also useful for development or public applications.
Les libellés
Maintenant que tout fonctionne bien, un petit détail subsiste pourtant. Peut-être souhaitez-vous définir des libellés des champs pour l'utilisateur. La méthode est d'écrire un fichier avec tous les libellés, traduisant ainsi le produit en entier dans une autre langue sans problème.
Afin de définir les libellés, vous n'avez qu'à éditer le fichier Management-labels_fr.properties avec le contenu suivant :
Warehouse=Entrepôt
Si vous le souhaitez, vous pouvez mettre les autres propriétés. Toutefois, les cas les plus communs (nombre, nom, description, etc.) sont déjà inclus dans OpenXava en anglais, espagnol, polonais, français, allemand, indonésien et catalan.
Si vous souhaitez une version dans une autre langue (espagnol par exemple), vous n'avez uniquement besoin de faire un copier-coller avec le suffixe approprié. Par exemple, vous pouvez avoir un fichier Management-labels_es.properties avec un nouveau contenu :
Warehouse=Almacén
Les libellés et messages par défaut d'OpenXava sont situés dans OpenXava/i18n/Labels.properties et OpenXava/i18n/Messages.properties. Si vous souhaitez en remplacer certains, vous n'avez pas à éditer ces fichiers. Vous utiliserez plutôt les même noms de clé dans les fichiers de ressources de votre projet. Ainsi vos libellés et vos messages seront utilisés en lieu et place de ceux fournis par OpenSava. Par exemple, si vous voulez changer le message standard dans le mode Liste "There are 23663 objects in list" par un autre, vous devez ajouter à votre fichier Management-labels_fr.properties cette entrée :
# list_count is in Messages_en.properties of OpenXava, this is an example
# of overriding a standard openxava message
list_count=Il y a {0} enregistrements dans la liste
A présent, votre application affichera "Il y a 23663 enregistrements dans la liste" à la place du message par défaut de OpenXava. Si vous vous souhaitez en savoir plus sur la définition des libellés de vos éléments OpenXava, regardez dans le dossier OpenXavaTest/i18n.
Table of Contents
Chapitre 2. Mon premier projet OpenXava
Si vous êtes tout nouveau sur OpenXava, consulter en priorité le Quick Start guide.Création d'un nouveau projet
Tout d'abord, lancez Eclipse et choisissez le workspace (espace de travail) qui est livré avec la distribution OpenXava.- En utilisant l'assistant approprié d'Eclipse, créez un nouveau projet Java (New Java Project) nommé Management. Maintenant que vous avez un nouveau projet Java vide dans le workspace.
- Ouvrez le projet OpenXavaTemplate et lancez CreateNewProject.xmlen utilisant Ant.
- Vous pouvez le faire en faisant un clic droit sur le fichier CreateNewProject.xml et dans le menu, choisir Run as... > Ant Build.
- Lorsque le script Ant vous demandera le nom du projet, entrez Management dans la boîte de dialogue.
- Pour finir, sélectionnez votre projet Management et pressez sur F5 afin de rafraîchir le contenu.
Vous avez à présent un nouveau projet prêt pour y travailler. Toutefois, avant de continuer, il s'agit de configurer le système de base de données.Configuration de la base de données
OpenXava génère une application JavaEE/J2EE qui doit être déployée sur un serveur d'application Java (à partir de la v2.0 d'OpenXava, les applications peuvent aussi s'exécuter sur un conteneur de servlet simple, comme Tomcat). Dans OpenXava, vous avez uniquement besoin d'indiquer la source de données (Data Source) JNDI et de configurer celle-ci dans votre serveur d'application. La configuration d'une source de données n'entre pas dans le cadre de ce guide. Quoi qu'il en soit, vous trouverez ci-dessous les instructions détaillées pour configurer la base de donnée nécessaire pour exécuter ce premier projet en utilisant le serveur d'application Tomcat et le système de base de données Hypersonic, tous deux inclus dans la distribution OpenXava. Le serveur Tomcat est situé dans le dossier openxava-5.x/tomcat.Assurez-vous que Tomcat est bien arrêté et éditez le fichier context.xml dans le dossier conf du serveur Tomcat. Dans ce fichier, ajoutez l'entrée suivante :
L'élément principal à noter ici est le nom JNDI, qui est l'unique référence utilisée par OpenXava, dans notre cas ManagementDS. La classe du pilote (driverClassName) et l'URL (url) dépendent de votre système. Dans notre cas, c'est Hypersonic qui est utilisé.
Votre premier composant métier
Créer un composant métier OpenXava est facile : La définition de chaque composant est une classe Java avec des annotations. Afin de commencer, vous devez créer une classe appelée Warehouse (entrepôt) :- Faites un clic droit sur le dossier src de votre projet et sélectionnez New > Package dans le menu contextuel
- Créez un package avec le nom org.openxava.management.model
- Faites un clic droit sur le paquetorg.openxava.management.model et sélectionnez New > Class
- Créez une classe avec pour nom Warehouse
A présent, éditez la nouvelle classe et écrivez le code source suivant :Cette classe contient (et contiendra) toutes les données nécessaires à l'application pour gérer le concept d'entrepôt (Warehouse). Pour le moment, nous avons uniquement la structure des données, mais vous pouvez y ajouter le mapping avec la base de données relationnelles, la logique métier, la présentation à l'écran, la gestion des listes, etc.
Concrètement, cette classe est une entité (Entity) conforme au standard JPA. Pour définir une classe comme entité, il suffit d'utiliser l'annotation @Entity dans la déclaration de classe. Dans l'entité, vous pouvez définir des propriétés ainsi:
Voici la signification de tout cela:
- @Id : Indique si la propriété fait partie de la clé. La clé est l'identificateur unique de l'objet et en général correspond à la clé primaire de la table de base de donnée.
- @Column(length=...) : Correspond à la longueur de la donnée. Optionnel. Cette information est utilisée pour l'interface utilisateur et pour générer les scripts de création des tables.
- @Required : Indique si la propriété est requise lors de la création ou de la modification de l'objet.
- La propriété est définie de manière usuelle pour une classe Java. Tous les types valides pour une propriété Java sont applicables, y compris les type intégrés, les classes du JDK et les classes personnalisées.
Les possibilités de définition de propriétés vont bien au-delà de ce qui est montré ici. Une explication plus détaillée est disponible dans le chapitre Modèle.La table
Avant de tester l'application, vous devez créer la table dans le système de base de données. Suivez ces étapes :- Lancez le serveur de base de données. Depuis la ligne de commande, allez dans le dossier openxava-3.x/tomcat/binet exécutez la ligne suivante:
- Linux/Unix: ./start-hsqldb.sh management-db 1666
- Windows: start-hsqldb management-db 1666
Remarque :Pour lancer le serveur hsqldb il faut que la variable JAVA_HOME pointe vers un JDK et non un JRE
Set JAVA_HOME = C:\Program Files (x86)\Java\jdk1.7.0_11
Attention, il n’est pas nécessaire de mettre des quotes pour encadrer le path du JDK
Exécution de votre application
Après ce rude labeur, il est temps de voir les fruits de votre sueur. Allons-y :Automatisation des tests
Même si la façon la plus naturelle de tester une application semble être l'ouverture de navigateur Internet et utiliser l'application comme l'utilisateur final, il est en fait bien plus productif d'automatiser les tests de façon à ce que, tout au long de la croissance de votre système, vous la contrôlez et vous diminuez les risques d'introduire des bugs au fur et à mesure de l'avancement de vos tâches.OpenXava utilise un système de test basé sur JUnit et HttpUnit. Les tests OpenXava JUnit simulent le comportement d'un utilisateur réel avec son navigateur. Ainsi, vous pouvez répliquer exactement les mêmes tests que vous feriez directement avec un navigateur. L'avantage de cette approche est que vous pouvez tester facilement toutes les couches de votre programme depuis l'interface utilisateur jusqu'à la base de donnée.
Si vous testez les modules manuellement, vous créez en général un nouvel enregistrement, vous le cherchez, vous le modifiez et finalement vous le supprimez. Automatisons ce processus : Tout d'abord, nous devons créer un paquet (package) pour les classes de tests, org.openxava.management.tests, et d'y ajouter une classe WarehouseTest avec le code suivant :
Please, translate to French: To run this test click the mouse right button on WareshouseTest and choose Run As > JUnit Test.
Voici ce que cet exemple nous apprend :
- Constructeur : Dans le constructeur, vous indiquez les noms de l'application et du module.
- login: (New in v5.0) (Please, translate to French) Login in the application using a user and password.
- execute : Cette méthode permet de simuler un click sur un bouton ou un lien. Comme argument, vous envoyez le nom de l'action. Vous pouvez voir les noms des actions dans le fichier OpenXava/xava/default-controllers.xml (les contrôleurs prédéfinis) et dans Management/xava/controllers.xml (les actions personnalisées). De même, si vous passez la souris sur un lien, le navigateur vous montre dans la barre d'état le code JavaScript avec l'action OpenXava à exécuter. Ici, execute("CRUD.new") est l'équivalent d'un click sur le bouton "nouveau" de l'interface graphique.
- setValue : Cette méthode assige une valeur à un contrôle du formulaire. Cela signifie que setValue("name", "Pepe") a le même effet que de taper le texte "Pepe" dans le champ "name". Les valeurs sont toujours alphanumériques car elles sont acheminées ves un formulaire HTML.
- assertNoErrors : Cet appel vérifie qu'aucune erreur s'est produite. Dans l'interface utilisateur, les erreurs sont des messages affichés en rouge et ajoutés par la logique applicative.
- assertValue : Cet appel vérifie que la valeur dans un champ du formulaire est bien celle que l'on attend.
- assertMessage : Cette méthode vérifie que l'application a bien affiché le message informatif attendu.
Vous pouvez constater qu'il est très aisé de tester le fonctionnement d'un module. Ecrire ce code peut prendre cinq minutes, mais, à la fin, peut vous sauver des heures de travail, car, à partir de maintenant, vous pouvez tester votre module en juste une seconde et que, si vous abîmez le module Warehouse (éventuellement touché par une autre partie de votre application), votre test vous prévient immédiatement.Pour plus de détails, vous pouvez vous référer à la JavaDoc de org.openxava.tests.ModuleTestBase et étudier les exemples dans org.openxava.test.tests du projet OpenXavaTest.
(Please, translate to French) You can disable login in your application, in that way you can avoid the first line of the test, the login("admin", "admin") (2) and get better performance for tests. To do it edit the properties/naviox.properties file and write:
This is also useful for development or public applications.
Les libellés
Maintenant que tout fonctionne bien, un petit détail subsiste pourtant. Peut-être souhaitez-vous définir des libellés des champs pour l'utilisateur. La méthode est d'écrire un fichier avec tous les libellés, traduisant ainsi le produit en entier dans une autre langue sans problème.Afin de définir les libellés, vous n'avez qu'à éditer le fichier Management-labels_fr.properties avec le contenu suivant :
Si vous le souhaitez, vous pouvez mettre les autres propriétés. Toutefois, les cas les plus communs (nombre, nom, description, etc.) sont déjà inclus dans OpenXava en anglais, espagnol, polonais, français, allemand, indonésien et catalan.
Si vous souhaitez une version dans une autre langue (espagnol par exemple), vous n'avez uniquement besoin de faire un copier-coller avec le suffixe approprié. Par exemple, vous pouvez avoir un fichier Management-labels_es.properties avec un nouveau contenu :
Les libellés et messages par défaut d'OpenXava sont situés dans OpenXava/i18n/Labels.properties et OpenXava/i18n/Messages.properties. Si vous souhaitez en remplacer certains, vous n'avez pas à éditer ces fichiers. Vous utiliserez plutôt les même noms de clé dans les fichiers de ressources de votre projet. Ainsi vos libellés et vos messages seront utilisés en lieu et place de ceux fournis par OpenSava. Par exemple, si vous voulez changer le message standard dans le mode Liste "There are 23663 objects in list" par un autre, vous devez ajouter à votre fichier Management-labels_fr.properties cette entrée :
# list_count is in Messages_en.properties of OpenXava, this is an example # of overriding a standard openxava message list_count=Il y a {0} enregistrements dans la listeA présent, votre application affichera "Il y a 23663 enregistrements dans la liste" à la place du message par défaut de OpenXava. Si vous vous souhaitez en savoir plus sur la définition des libellés de vos éléments OpenXava, regardez dans le dossier OpenXavaTest/i18n.